//
//  StatusCell.swift
//  Practice
//
//  Created by miaozhihui on 2017/2/8.
//  Copyright © 2017年 DeKuTree. All rights reserved.
//

import UIKit

/// 微博 Cell 的协议
/// 协议需要遵守 NSObjectProtocol 协议
/// 如果需要设置可选协议方法
/// - 协议需要是 @objc 的
/// - 方法需要 @objc optional
@objc protocol StatusCellDelegate: NSObjectProtocol {
    
    /// 微博 Cell 选中 URL 字符串
    @objc optional func statusCellDidSelectedURLString(cell: StatusCell, urlString: String)
}

/// 微博 Cell
class StatusCell: UITableViewCell {
    
    /// 代理属性
    weak var delegate: StatusCellDelegate?
    
    /// 微博视图模型
    var viewModel: StatusViewModel? {
        didSet {
            // 微博文本
            statusLabel.attributedText = viewModel?.statusAttrText
            // 设置转发微博的正文
            retweetedLabel?.attributedText = viewModel?.retweetedAttrText
            // 用户名
            nameLabel.text = viewModel?.status.user?.screen_name
            // 会员图标
            memberIconView.image = viewModel?.memberIcon
            // 认证图标
            vipIconView.image = viewModel?.vipIcon
            // 头像
            iconView.zh_setImage(urlString: viewModel?.status.user?.profile_image_url, placeholderImage: UIImage(named: "avatar_default_big")!, isDrawCircle: true)
            // 底部工具栏
            toolBar.viewModel = viewModel
            // 传递模型数据
            pictureView.viewModel = viewModel
            // 设置来源
            sourceLabel.text = viewModel?.status.source
        }
    }
    
    
    /// 头像
    @IBOutlet weak var iconView: UIImageView!
    
    /// 姓名
    @IBOutlet weak var nameLabel: UILabel!
    
    /// 会员
    @IBOutlet weak var memberIconView: UIImageView!
    
    /// 时间
    @IBOutlet weak var timeLabel: UILabel!
    
    /// 来源
    @IBOutlet weak var sourceLabel: UILabel!
    
    /// 认证图标
    @IBOutlet weak var vipIconView: UIImageView!
    
    /// 微博正文
    @IBOutlet weak var statusLabel: FFLabel!
    
    /// 底部工具栏
    @IBOutlet weak var toolBar: StatusToolBar!
    
    /// 配图视图
    @IBOutlet weak var pictureView: StatusPictureView!
    
    @IBOutlet weak var retweetedLabel: FFLabel?
    override func awakeFromNib() {
        super.awakeFromNib()
        
        // 离屏渲染 - 异步绘制
        layer.drawsAsynchronously = true
        // 栅格化 - 异步绘制之后，会生成一张独立的图像，cell在屏幕上滚动的时候是滚动的这张图片
        layer.shouldRasterize = true
        layer.rasterizationScale = UIScreen.xs_scale()
        
        // 设置微博文本代理
        statusLabel.delegate = self
        retweetedLabel?.delegate = self
    }
}

extension StatusCell: FFLabelDelegate {
    
    func labelDidSelectedLinkText(label: FFLabel, text: String) {
        
        // 判断是否是 URL
        if !(text.hasPrefix("http://") || text.hasPrefix("https://")) {
            return
        }
        // 使用 ? 表示：如果代理没有实现协议方法，就什么都不做
        // 使用 ! 表示：如果代理没有实现协议方法，仍然强行执行，会崩溃
        delegate?.statusCellDidSelectedURLString?(cell: self, urlString: text)
    }
}
